/**
 * 写一个函数 StrToInt，实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
 * 
 * 说明：
   假设我们的环境只能存储 32 位大小的有符号整数，那么其数值范围为 [−2**31,  2**31 − 1]。
   如果数值超过这个范围，请返回  INT_MAX (2**31 − 1) 或 INT_MIN (−2**31) 。
 */

//时间复杂度 O(N) ： 其中 N 为字符串长度，线性遍历字符串占用 O(N) 时间。
//空间复杂度 O(N) ： 删除首尾空格后需建立新字符串，最差情况下占用 O(N) 额外空间。

var strToInt = function(str) {
    str = str.trim();
    if (!str) return 0;
    let INT_MAX = 2 ** 31 - 1,
        INT_MIN = -(2 ** 31);
    let res = 0,
        i = 1,
        sign = 1;
    if (str[0] === '-') sign = -1;
    else if (str[0] !== '+') i = 0;
    for (let j = i; j < str.length; j++) {
        if (str[j] < '0' || str[j] > '9') break;
        res = res * 10 + (str[j] - '0');
        if (res * sign > INT_MAX) return INT_MAX;
        else if (res * sign < INT_MIN) return INT_MIN;
    }
    return res * sign;
};